/**
 * 文件名：SerialPortProtocol.java
 *
 * 创建人：Elvin Zhao - 279152260@qq.com
 *
 * 创建时间：2018年7月13日 上午11:05:54
 *
 * 版权所有：FNII
 */
package com.springvision.test;

import com.springvision.yuanfeng.device.entity.DeviceMessage;

/**
 * [描述信息：说明类的基本功能] 串口协议格式：AA55010400000000FFFF 串口协议说明： 帧头：AA 55 ，0-3 指令：01，4-5
 * 数据长度：04，6-7 数据：00 00 00 00 8-15 帧尾：FF FF。16-19 16进制转10进制数据， 数据前两个字节表示地址，
 * 后两个字节代表数据大小，且后两位固定为小数
 *
 *
 * 
 * @author Elvin Zhao - 279152260@qq.com
 * @version 1.0 Created on 2018年7月13日 上午11:05:54
 */
public class SerialPortProtocol {

	private String device;

	private Float value;

	/**
	 * 帧头
	 */
	public static String _FRAME_HEADER = "AA55";

	/**
	 * 指令位
	 */
	public static String _FRAME_INSTRUCTION = "01";

	/**
	 * 长度
	 */
	public static String _FRAME_LENGTH = "04";

	/**
	 * 帧尾
	 */
	public static String _FRAME_TAIL = "FFFF";

	/**
	 * 获取数据帧前部
	 * 
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com
	 * @date: Created on 2018年7月13日 上午11:16:31
	 */
	public static String _FRAME_BEFORE_DATA() {
		return _FRAME_HEADER + _FRAME_INSTRUCTION + _FRAME_LENGTH;
	}

	/**
	 * 获取数据帧尾部
	 * 
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com
	 * @date: Created on 2018年7月13日 上午11:18:53
	 */
	public static String _FRAME_AFTER_DATA() {
		return _FRAME_TAIL;
	}

	/**
	 * @param device
	 * @param value
	 */
	public SerialPortProtocol(String frame) {
		super();
		// TODO 如果桢大于20位.异常排错 frame.length() == 20 && 
		if (frame.startsWith(_FRAME_BEFORE_DATA())
				&& frame.startsWith(_FRAME_AFTER_DATA(), 16)) {
			this.device = String.valueOf(Integer.parseInt(frame.substring(8, 12), 16));
			this.value = Integer.parseInt(frame.substring(12, 16), 16) / 100F;
		}
	}

	public SerialPortProtocol() {
		super();
	}

	/**
	 *
	 * @return
	 */
	public String getDevice() {
		return device;
	}

	/**
	 *
	 * @param device
	 */
	public void setDevice(String device) {
		this.device = device;
	}

	/**
	 *
	 * @return
	 */
	public Float getValue() {
		return value;
	}

	/**
	 *
	 * @param value
	 */
	public void setValue(Float value) {
		this.value = value;
	}
	
	public DeviceMessage transformer() {
		//TODO 转换方法
		return new DeviceMessage();
	}

}
